package com.hd123.rumba.gwt.widget2.client.grid;

import java.util.EventListener;

/**
 * RGrid绘制事件监听器接口
 * 
 * @author LiQi
 * 
 */
public interface RGridDrawListener extends EventListener {

  /**
   * 构造一个单元格时触发，通常调用RGrid.rebuild()时每个单元格会触发一次本事件。可以在本事件中替换单元格的控件
   * ，以实现丰富的定制效果
   * 
   * @param grid
   *          触发事件的RGrid
   * @param colDef
   *          单元格所在列的列定义
   * @param row
   *          行序号，包含表格的表头和表尾
   * @param col
   *          可见列序号
   */
  void onBuildCell(RGrid grid, RGridColumnDef colDef, int row, int col);

  /**
   * 刷新一个单元格时触发，通常调用RGrid.refresh(),
   * refreshRow(),refreshCell()时会触发本事件。
   * 
   * @param grid
   *          触发事件的RGrid
   * @param colDef
   *          单元格所在列的列定义
   * @param row
   *          行序号，包含表格的表头和表尾
   * @param col
   *          可见列序号
   * @param providerData
   *          从RGridDataProvider取得的数据，可以替换这些数据，或根据这些数据修改单元格的外观
   */
  void onRefreshCell(RGrid grid, RGridColumnDef colDef, int row, int col, Object providerData);

  /**
   * 表格数据刷新后触发，通常在调用{@link RGrid#rebuild()}和
   * {@link RGrid#refresh()}后都会触发。
   * 
   * @param grid
   */
  void afterRefresh(RGrid grid);
}
